// 导入数据库操作模块
const db = require('../db/index');
// 导入bcryptjs
const bcrypt = require('bcryptjs');
// 导入生成token的包
const jwt = require('jsonwebtoken');
// 引入全局配置的文件
const config = require('../config')
const { result } = require('@hapi/joi/lib/base');
// 注册新用户的处理函数
exports.regUser=(req,res)=>{
  // 获取客户端提交到服务器的用户信息
  const userinfo = req.body
  // 对表单数据进行合法性校验
  if(!userinfo.username || !userinfo.password) {
    return res.send({
      status:1,
      message:'用户名或密码不合法！'
    })   
  }
  // 定义sql语句，查询用户名是否被占用
  const sqlStr = 'select *from ev_users where username=?'
  db.query(sqlStr,[userinfo.username],(err,results)=>{
    // 执行sql语句失败
    if(err){
      // return res.send({status:1,message:err.message})
      return res.cc(err)
  
  }
    // 判断用户名是否被占用
    if(results.length>0){
      // return res.send({status:1,message:'用户名被占用，请更换其他用户名'})
      return res.cc('用户名被占用，请更换其他用户名')
    }
    
    // 调用bcrypt.hashSync()对密码进行破解,返回值是加密后的字符串
    userinfo.password = bcrypt.hashSync(userinfo.password,10)
    
    // 定义插入新用户的语句
    const sql = 'insert into ev_users set ?'
    // 执行sql语句
    db.query(sql,{username:userinfo.username,password:userinfo.password},(err,results)=>{

      if(err){
        // return res.send({status:0,message:err.message})
        return res.cc(err)
      }
      // 判断影响行数是否为1，不等于1也是失败
      if(!results.length===1){
        // return res.send({status:1,message:'注册用户失败，请稍后再试'})
        return res.cc('注册用户失败，请稍后再试')
      }
      // 注册成功
      res.cc('注册成功',0)
      // res.send({status:0,message:'插入成功 '})
    })





    // 用户名可以使用
    // res.send('reguser ok')
  })
 
}
// 登陆的处理函数
exports.login=(req,res)=>{ 
  // 接受表单的数据
  const userinfo = req.body
  // 定义sql语句
  const sql = 'select * from ev_users where username=?'
  // 执行sql语句，根据用户名查询用户的信息
  db.query(sql,userinfo.username,(err,results)=>{
    // 执行sql语句,失败
    if(err) return res.cc(err)
    // 执行成功，但是获取到的数据条数不等于1
    if(results.length!=1) return res.cc('登录失败，请重试')
    // res.cc('查询成功',0)
    // console.log(results);
    // 判断密码是否正确,results返回的是一个数组对象
    const compareResult = bcrypt.compareSync(userinfo.password,results[0].password)
    if(!compareResult) return res.cc('登陆失败')

    // 登陆成功，生成token字符串

    const user =  {...results[0],password:'',user_pic:''}
    // 对用户信息进行加密
    const tokenStr = jwt.sign(user,config.jwtSecretkey,{expiresIn:config.expiresIn})
    // console.log(tokenStr);
    // 调用res。send响应给token
    res.send({
      status:0,
      message:'登陆成功',
      token:'Bearer ' + tokenStr 
    })
  })
  
}